package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISalaryBasicDAO;
import org.jsola.hr.dto.SalaryBasicAddDTO;
import org.jsola.hr.dto.SalaryBasicUpdateDTO;
import org.jsola.hr.entity.SalaryBasicDO;
import org.jsola.hr.query.SalaryBasicQuery;
import org.jsola.hr.query.SalaryChangesQuery;
import org.jsola.hr.vo.SalaryBasicListVO;
import org.jsola.hr.vo.SalaryBasicVO;
import org.jsola.hr.vo.SalaryChangesVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 员工薪资表
 *
 * @author zhr
 */
public interface ISalaryBasicService extends IService<ISalaryBasicDAO, SalaryBasicDO> {

    /**
     * 新增员工薪资表
     *
     * @param salaryBasicAddDTO 新增员工薪资表DTO
     * @param tokenUser         当前用户
     * @return 员工薪资表详情信息
     */
    SalaryBasicVO save(SalaryBasicAddDTO salaryBasicAddDTO, TokenUser tokenUser);

    /**
     * 修改员工薪资表
     *
     * @param salaryBasicUpdateDTO 修改员工薪资表DTO
     * @param tokenUser            当前用户
     * @return 更新数量
     */
    int update(SalaryBasicUpdateDTO salaryBasicUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工薪资表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser      当前用户
     * @param salaryBasicIds 员工薪资表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... salaryBasicIds);

    /**
     * 根据员工薪资表id查找
     *
     * @param salaryBasicId 员工薪资表id
     * @param siteId        所属站点id
     * @return 员工薪资表详情信息
     */
    SalaryBasicVO selectById(String salaryBasicId, String siteId);

    /**
     * 查询员工薪资表
     *
     * @param salaryBasicQuery 查询条件
     * @param siteId           所属站点id
     * @return 员工薪资表列表信息
     */
    List<SalaryBasicListVO> select(SalaryBasicQuery salaryBasicQuery, String siteId);

    /**
     * 查询员工薪资表记录数
     *
     * @param salaryBasicQuery 查询条件
     * @param siteId           所属站点id
     * @return 员工薪资表记录数
     */
    int selectCount(SalaryBasicQuery salaryBasicQuery, String siteId);

    /**
     * 分页查询员工薪资表
     *
     * @param salaryBasicQuery 查询条件
     * @param siteId           所属站点id
     * @return 员工薪资表列表信息
     */
    Page<SalaryBasicListVO> selectPage(SalaryBasicQuery salaryBasicQuery, String siteId);


    /**
     * 根据员工薪资表id查找
     *
     * @param salaryBasicId 员工薪资表id
     * @param siteId        所属站点id
     * @return 员工薪资表
     */
    SalaryBasicDO selectDOById(String salaryBasicId, String siteId);

    /**
     * 查询员工薪资表
     *
     * @param salaryBasicQuery 查询条件
     * @param siteId           所属站点id
     * @return 员工薪资表列表
     */
    List<SalaryBasicDO> selectDO(SalaryBasicQuery salaryBasicQuery, String siteId);

    /**
     * 保存工资基础信息
     *
     * @param salaryBasicAddDTO 工资基础信息DTO
     * @param tokenUser         当前用户
     * @return 工资基础信息
     */
    SalaryBasicVO saveSalaryBasic(SalaryBasicAddDTO salaryBasicAddDTO, TokenUser tokenUser);

    /**
     * 分页查询员工薪资档案列表
     *
     * @param salaryBasicQuery 查询条件
     * @param siteId           站点
     * @return 询员工薪资档案列表
     */
    Page<SalaryBasicVO> selectPageEmpSalary(SalaryBasicQuery salaryBasicQuery, String siteId);

    /**
     * 查询全部员工薪资档案列表
     *
     * @param salaryBasicQuery 查询条件
     * @param siteId           站点
     * @return 员工薪资档案列表
     */
    List<SalaryBasicVO> selectEmpSalary(SalaryBasicQuery salaryBasicQuery, String siteId);

    /**
     * 查询公司下指定员工薪资档案列表
     *
     * @param companyId 公司Id
     * @param empIds    员工Id
     * @param siteId    站点Id
     * @return 员工薪资档案列表
     */
    List<SalaryBasicVO> selectByCompanyIdAndEmpIds(String companyId, List<String> empIds, String siteId);


    /**
     * 员工定薪时查询基本信息
     *
     * @param id
     * @param siteId
     * @return
     */
    SalaryBasicVO selectEmpSalary(String id, String siteId);

    /**
     * 定薪保存
     *
     * @param salaryBasicAddDTO
     * @param tokenUser
     * @return
     */
    Integer insertEmpSalary(SalaryBasicAddDTO salaryBasicAddDTO, TokenUser tokenUser);

    /**
     * 调薪保存
     *
     * @param salaryBasicAddDTO
     * @param tokenUser
     * @return
     */
    Integer updateEmpSalary(SalaryBasicAddDTO salaryBasicAddDTO, TokenUser tokenUser);

    /**
     * 查询薪资详情
     *
     * @param salaryChangesQuery
     * @param siteId
     * @return
     */
    Page<SalaryChangesVO> selectPageChanges(SalaryChangesQuery salaryChangesQuery, String siteId);
}


